<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-CN" />
<link href="style/css/manual-zip.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="style/css/manual-zip-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<title>编译与安装 － Apache 2.2 中文手册 [金步国]</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head>
<body id="manual-page">
<div id="page-header"><p class="menu"><a href="mod/index.html">模块索引</a> | <a href="mod/directives.html">指令索引</a> | <a href="faq/index.html">常见问题</a> | <a href="glossary.html">词汇表</a> | <a href="sitemap.html">站点导航</a></p><p class="apache">Apache HTTP Server 版本2.2</p><img alt="" src="images/feather.gif" /></div>
<div class="up"><a href="index.html"><img title="&lt;-" alt="&lt;-" src="images/left.gif" /></a></div>
<div id="path"><a href="https://www.apache.org/">Apache</a> &gt; <a href="https://httpd.apache.org/">HTTP Server</a> &gt; <a href="https://httpd.apache.org/docs/">文档</a> &gt; <a href="index.html">版本2.2</a></div>

<div id="translation-info">　　 <a href="translator_announcement.html#thanks">致谢</a> | 本篇译者：<a href="../../index.html">金步国</a>(<a href="../../index.html">作品集</a>) | 本页最后更新：2008年3月1日</div>
<div id="page-content"><div id="preamble"><h1>编译与安装</h1>



    <p>本文仅阐述Apache在Unix和类Unix系统中的编译和安装，在Windows中的编译和安装可以参考<a href="platform/windows.html">在Microsoft Windows中使用Apache</a>。其他平台可以参见<a href="platform/index.html">针对特定平台的说明</a>文档。</p>

    <p>像其它许多开源项目一样，Apache使用<code>libtool</code>和<code>autoconf</code>建立编译环境。</p>

    <p>如果你只进行很小的版本升级(比如2.2.54→2.2.55)，请直接跳转到下面的<a href="install.html#upgrading">升级</a>部分。</p>

</div>
	<div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="overview" id="overview">针对心急者的概述</a></h2>

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="#AAAAAA">
<tr><td><a href="install.html#download">下载</a></td><td><code>$ lynx https://httpd.apache.org/download.cgi</code>
        </td></tr>
<tr><td><a href="install.html#extract">解压</a></td><td><code>$ gzip -d httpd-<em>NN</em>.tar.gz<br />
         $ tar xvf httpd-<em>NN</em>.tar<br />
         $ cd httpd-<em>NN</em></code></td></tr>
<tr><td><a href="install.html#configure">配置</a></td><td><code>$ ./configure --prefix=<em>PREFIX</em></code>
        </td></tr>
<tr><td><a href="install.html#compile">编译</a></td><td><code>$ make</code> </td></tr>
<tr><td><a href="install.html#install">安装</a></td><td><code>$ make install</code> </td></tr>
<tr><td><a href="install.html#customize">配置</a></td><td><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code> </td></tr>
<tr><td><a href="install.html#test">测试</a></td><td><code>$ <em>PREFIX</em>/bin/apachectl -k start</code>
        </td></tr>
</table>

    <p>其中<em>NN</em>必须用当前的副版本号替代；<em>PREFIX</em>是服务器被安装到文件系统中的路径名，如果没有指定<em>PREFIX</em>，默认会装到<code>/usr/local/apache2</code></p>

    <p>下面从编译和安装Apache httpd的要求开始详细阐述编译和安装的每个步骤。</p>
</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="requirements" id="requirements">要求</a></h2>

    <p>编译Apache的要求如下：</p>

    <dl>
      <dt>磁盘空间</dt>
      <dd>必须保证有50MB以上的自由临时磁盘空间。Apache安装完毕后会占据10MB左右的空间，实际的磁盘空间需求会因编译设置和是否安装第三方模块而有所不同。</dd>

      <dt>ANSI-C编译器及编译环境</dt>
      <dd>必须装有ANSI-C编译器，推荐使用<a href="http://www.gnu.org/">自由软件基金会(FSF)</a>的<a href="http://gcc.gnu.org/">GCC</a>。如果没有GCC，那么要确保使用的编译器符合ANSI标准，而且<code>PATH</code>中必须包含指向基本编译工具比如<code>make</code>的路径。</dd>

      <dt>确保准确的时间</dt>
      <dd>由于HTTP协议的元素都会用到时间，有必要了解一下你的系统所使用的时间同步机制。在基于网络时间协议(NTP)的系统中，一般是用<code>ntpdate</code>或<code>xntpd</code>来同步时间。有关NTP软件的资料请参见<a href="http://www.ntp.org">NTP主页</a>。</dd>

      <dt><a href="http://www.perl.org/">Perl 5</a> [可选]</dt>
      <dd>有些用Perl写的支持脚本，如<code class="program"><a href="programs/apxs.html">apxs</a></code>或<code class="program"><a href="programs/dbmmanage.html">dbmmanage</a></code>  ，需要Perl5解释器(5.003或以上的版本就足够了)。如果系统中存在多个Perl解释器，比如有系统提供的Perl 4，还有你自己安装的Perl 5，推荐你使用 <code>--with-perl</code> 选项来确保<code class="program"><a href="programs/configure.html">configure</a></code>脚本使用正确的版本。如果<code class="program"><a href="programs/configure.html">configure</a></code>没有没找到Perl 5也没关系，这并不影响Apache httpd的编译和安装，只是相关的支持脚本不能使用而已。</dd>

      <dt><a href="http://apr.apache.org">apr/apr-util &gt;= 1.2</a></dt>
      <dd><code>apr</code>和<code>apr-util</code>包含在Apache httpd的发行源代码中，并且在绝大多数情况下使用都不会出现问题。当然，如果<code>apr</code>或<code>apr-util</code>的1.0或1.1版本已经安装在你的系统中了，则必须将你的<code>apr</code>/<code>apr-util</code>升级到1.2版本，或者将httpd单独分开编译。要使用发行源代码中自带的<code>apr</code>/<code>apr-util</code>源代码进行安装，你必须手动完成：
<div class="example"><p><code>
# 编译和安装 apr 1.2<br />
cd srclib/apr<br />
./configure --prefix=/usr/local/apr-httpd/<br />
make<br />
make install<br />
<br />
# 编译和安装 apr-util 1.2<br />
cd ../apr-util<br />
./configure --prefix=/usr/local/apr-util-httpd/ --with-apr=/usr/local/apr-httpd/<br />
make<br />
make install<br />
<br />
# 配置 httpd<br />
cd ../../<br />
./configure --with-apr=/usr/local/apr-httpd/ --with-apr-util=/usr/local/apr-util-httpd/<br />
</code></p></div>
      </dd>
    </dl>
</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="configureoptions" id="configureoptions">[译者添加] apr与apr-util的configure选项</a></h2>
<p>由于语法、配置选项、安装目录、系统类型、环境变量部分与httpd的<code class="program"><a href="programs/configure.html">configure</a></code>完全相同，所以这些部分略过不表。</p>
<h3>用于apr的configure脚本的选项：</h3>
<h4><a>可选特性</a></h4>
      <dl>
        <dt><code>--enable-experimental-libtool</code></dt>
        <dd>启用试验性质的自定义libtool</dd>

        <dt><code>--disable-libtool-lock</code></dt>
        <dd>取消锁定(可能导致并行编译崩溃)</dd>

        <dt><code>--enable-debug</code></dt>
        <dd>启用调试编译，仅供开发人员使用。</dd>

        <dt><code>--enable-maintainer-mode</code></dt>

        <dd>打开调试和编译时警告，仅供开发人员使用。</dd>

        <dt><code>--enable-profile</code></dt>
        <dd>打开编译profiling(GCC)</dd>

        <dt><code>--enable-pool-debug[=<var>yes|no|verbose|verbose-alloc|lifetime|owner|all</var>]</code></dt>
        <dd>打开pools调试</dd>

        <dt><code>--enable-malloc-debug</code></dt>
        <dd>打开BeOS平台上的malloc_debug</dd>

        <dt><code>--disable-lfs</code></dt>
        <dd>在32-bit平台上禁用大文件支持(large file support)</dd>

        <dt><code>--enable-nonportable-atomics</code></dt>
        <dd>若只打算在486以上的CPU上运行Apache ，那么使用该选项可以启用更加高效的基于互斥执行的原子操作。</dd>

        <dt><code>--enable-threads</code></dt>
        <dd>启用线程支持，在线程型的MPM上必须打开它</dd>

        <dt><code>--disable-threads</code></dt>
        <dd>禁用线程支持，如果不使用线程化的MPM ，可以关闭它以减少系统开销。</dd>

        <dt><code>--disable-dso</code></dt>

        <dd>禁用DSO支持</dd>

        <dt><code>--enable-other-child</code></dt>
        <dd>启用可靠子进程支持</dd>

        <dt><code>--disable-ipv6</code></dt>
        <dd>禁用IPv6支持</dd>

      </dl>
<h4><a>可选的额外程序包</a></h4>
      <dl>
        <dt><code>--with-gnu-ld</code></dt>
        <dd>指定C编译器使用 GNU ld </dd>

        <dt><code>--with-pic</code></dt>
        <dd>只使用 PIC/non-PIC 对象[默认为两者都使用]</dd>

        <dt><code>--with-tags[=<var>TAGS</var>]</code></dt>
        <dd>包含额外的配置</dd>

        <dt><code>--with-installbuilddir=<var>DIR</code></dt>

        <dd>指定APR编译文件的存放位置(默认值为：'${datadir}/build')</dd>

        <dt><code>--without-libtool</code></dt>
        <dd>禁止使用libtool连接库文件</dd>

        <dt><code>--with-efence[=<var>DIR</var>]</code></dt>
        <dd>指定Electric Fence的安装目录</dd>

        <dt><code>--with-sendfile</code></dt>
        <dd>强制使用sendfile(译者注：Linux2.4/2.6内核都支持)</dd>

        <dt><code>--with-egd[=<var>DIR</var>]</code></dt>
        <dd>使用EDG兼容的socket</dd>

        <dt><code>--with-devrandom[=<var>DEV</var>]</code></dt>
        <dd>指定随机设备[默认为：/dev/random]</dd>

      </dl>

<h3>用于apr-util的configure脚本的选项：</h3>
<h4><a>可选的额外程序包</a></h4>
      <dl>
<dt><code>--with-apr=<var>PATH</var></code></dt>
        <dd>指定APR的安装目录(--prefix选项值或apr-config的路径)</dd>
<dt><code>--with-ldap-include=<var>PATH</var></code></dt>
        <dd>ldap包含文件目录(带结尾斜线)</dd>
<dt><code>--with-ldap-lib=<var>PATH</var></code></dt>
        <dd>ldap库文件路径</dd>
<dt><code>--with-ldap=<var>library</var></code></dt>
        <dd>使用的ldap库</dd>
<dt><code>--with-dbm=<var>DBM</var></code></dt>
        <dd>选择使用的DBM类型DBM={sdbm,gdbm,ndbm,db,db1,db185,db2,db3,db4,db41,db42,db43,db44}</dd>
<dt><code>--with-gdbm=<var>PATH</var></code></dt>
        <dd>指定GDBM的位置</dd>
<dt><code>--with-ndbm=<var>PATH</var></code></dt>
        <dd>指定NDBM的位置</dd>
<dt><code>--with-berkeley-db=<var>PATH</var></code></dt>
        <dd>指定Berkeley DB的位置</dd>
<dt><code>--with-pgsql=<var>PATH</var></code></dt>
        <dd>指定PostgreSQL的位置</dd>
<dt><code>--with-mysql=<var>PATH</var></code></dt>
        <dd>参看INSTALL.MySQL文件的内容</dd>
<dt><code>--with-sqlite3=<var>PATH</var></code></dt>
        <dd>指定sqlite3的位置</dd>
<dt><code>--with-sqlite2=<var>PATH</var></code></dt>
        <dd>指定sqlite2的位置</dd>
<dt><code>--with-expat=<var>PATH</var></code></dt>
        <dd>指定Expat的位置或'builtin'</dd>
<dt><code>--with-iconv=<var>PATH</var></code></dt>
        <dd>iconv的安装目录</dd>
      </dl>
</div>
<div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="download" id="download">下载</a></h2>

    <p>Apache可以从<a href="https://httpd.apache.org/download.cgi">Apache HTTP服务器下载站点</a>及其镜像站点下载。大多数类UNIX系统的Apache用户最好的选择是下载源代码并编译一个适合自己的版本，这个过程(下面将要讲述)是很简单的，它允许你根据自己的需求进行定制。另一方面编译好的二进制版本通常没有进行及时的更新。如果你下载的是编译好的二进制版本，请按照其中的<code>INSTALL.bindist</code>文件进行安装。</p>

    <p>下载完毕后，应该对下载来的tar包作<a href="https://httpd.apache.org/dev/verification.html">PGP签名校验</a>，以确保其完整而且未被篡改过。(<a href="https://httpd.apache.org/download.cgi#verify">PGP下载页面</a>)</p>

</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="extract" id="extract">解压</a></h2>

    <p>解压Apache httpd的tar包很简单：</p>

<div class="example"><p><code>
$ gzip -d httpd-<em>NN</em>.tar.gz<br />
$ tar xvf httpd-<em>NN</em>.tar
</code></p></div>

    <p>这样就在当前目录下新建了一个包含发行版源代码的目录，必须<code>cd</code>进入这个目录以继续服务器的编译。</p>
</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="configure" id="configure">配置源代码树</a></h2>

    <p>这一步是根据你的特定平台和个人需求配置源代码树。位于发行源代码根目录的<code class="program"><a href="programs/configure.html">configure</a></code>脚本会完成这个步骤(对下载Apache CVS版源代码的开发者，需要装有<code>autoconf</code>和<code>libtool</code> ，并需要执行<code>buildconf</code> ，对于官方的发行版则没这个必要)。</p>

    <p>要想用所有的默认值配置源代码树只要简单的执行 <code>./configure</code> 命令就可以了，同时<code class="program"><a href="programs/configure.html">configure</a></code>还可以接受命令行参数以改变默认值。</p>

    <p>最重要的选项是Apache安装目录的前缀：<code>--prefix</code> ，因为Apache需要知道这个目录才能正常运作。更多的微调选项请参考<a href="programs/configure.html#installationdirectories">配置选项详解</a>。</p>

    <p>这样，你就可以通过在配置选项中指定要启用或禁用哪些<a href="mod/index.html">模块</a>来定制Apache的<a href="programs/configure.html#optionalfeatures">特性</a>。<a href="mod/module-dict.html#Status">Base</a>组的模块默认包含在Apache中。其他组的模块可以通过 <code>--enable-<var>module</var></code> 指令启用。其中<var>module</var>是模块名去掉"<code>mod_</code>"并将下划线转换成连字符后的字符串。你也可以使用 <code>--enable-<var>module</var>=shared</code> 指令将模块编译为可在运行时加载和卸载的<a href="dso.html">动态共享对象(DSO)</a>。同样的，你也可以使用 <code>--disable-<var>module</var></code> 指令禁用<a href="mod/module-dict.html#Status">Base</a>组的模块。注意，使用这些指令的时候<code class="program"><a href="programs/configure.html">configure</a></code>不会对你拼写错误的模块发出警告说找不到某某模块，而只是简单的忽略这个选项。</p>

    <p>另外，有时候还必须提供给<code class="program"><a href="programs/configure.html">configure</a></code>脚本关于编译器、库、头文件位置的更多信息。这些可以通过环境变量或者命令行选项传递给<code class="program"><a href="programs/configure.html">configure</a></code>脚本。要了解更多信息，请参考<code class="program"><a href="programs/configure.html">配置源代码树</a></code>。</p>

    <p>为了让你对能指定什么有一个简单的印象，此例演示编译Apache ，并将其安装在<code>/sw/pkg/apache</code>目录，指定了一个特定的编译器以及编译参数，而且允许今后将两个附加的模块<code class="module"><a href="mod/mod_rewrite.html">mod_rewrite</a></code>和<code class="module"><a href="mod/mod_speling.html">mod_speling</a></code>通过DSO机制在运行时动态加载：</p>

	<div class="example"><p><code>
      $ CC="pgcc" CFLAGS="-O2" \<br />
       ./configure --prefix=/sw/pkg/apache \<br />
       --enable-rewrite=shared \<br />
       --enable-speling=shared
</code></p></div>

    <p><code class="program"><a href="programs/configure.html">configure</a></code>需要运行几分钟，以测试指定的功能在你的系统中是否有效，并建立稍后编译时所需的许多Makefile文件。</p>

</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="compile" id="compile">编译</a></h2>

    <p>运行以下命令你就可以编译Apache的各个部分了：</p>

<div class="example"><p><code>$ make</code></p></div>

    <p>请耐心等候，因为对一个基本配置的编译，需要运行几分钟左右，实际需要的时间会因为你的硬件和选择的模块数量有很大不同。</p>
</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="install" id="install">安装</a></h2>

    <p>现在可以在<em>PREFIX</em>目录(参见上述的 <code>--prefix</code> 参数)下安装了，执行：</p>

<div class="example"><p><code>$ make install</code></p></div>

    <p>如果是升级，安装程序不会覆盖你的配置文件和文档。</p>
</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="customize" id="customize">配置</a></h2>

    <p>接着，通过修改<code><em>PREFIX</em>/conf/</code>目录下的<a href="configuring.html">配置文件</a>，来配置Apache HTTP服务器。</p>

<div class="example"><p><code>$ vi <em>PREFIX</em>/conf/httpd.conf</code></p></div>

    <p><a href="index.html">docs/manual/</a>下有Apache使用手册，<a href="https://httpd.apache.org/docs/2.2/">https://httpd.apache.org/docs/2.2/</a>有最新的文档，你还可以查看完整的<a href="mod/directives.html">指令索引</a>。</p>
</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="test" id="test">测试</a></h2>

    <p>现在，可以执行下述命令立即<a href="invoking.html">启动</a>你的Apache HTTP服务器：</p>

<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl -k start</code></p></div>

    <p>你应该可以用<code>http://localhost/</code>来请求你的第一个网页了，这个网页位于<code class="directive"><a href="mod/core.html#documentroot">DocumentRoot</a></code>目录下，通常是<code><em>PREFIX</em>/htdocs/</code> 。随后，可以这样<a href="stopping.html">停止</a>服务器：</p>

<div class="example"><p><code>$ <em>PREFIX</em>/bin/apachectl -k stop</code></p></div>
</div><div class="top"><a href="install.html#page-header"><img alt="top" src="images/up.gif" /></a></div>
<div class="section">
<h2><a name="upgrading" id="upgrading">升级</a></h2>

    <p>升级的第一步是阅读源代码目录中的发布公告(release announcement)和<code>CHANGES</code>文件以寻找可能会对你的站点产生影响的变化。如果主板本号的变化(例如1.3→2.0或2.0→2.2)表明编译时和运行时的配置发生了重大变化，需要手动调整，所有模块也需要升级以兼容新版本的模块API 。</p>

    <p>小幅度的版本升级(例如：2.2.55→2.2.57)很容易。<code>make install</code> 的过程不会改写任何已经存在的文档、日志、配置文件。此外，开发者也会尽量兼容上一版本的<code class="program"><a href="programs/configure.html">configure</a></code>选项、运行时配置、模块API 。大多数情况下，你将能够使用与上一版本完全相同的<code class="program"><a href="programs/configure.html">configure</a></code>命令行和运行时配置，而你原来的所有模块也将正常工作。</p>

    <p>如果你保存了上一次安装后<code>build</code>子目录中的<code>config.nice</code>文件，升级将更加平滑。这个文件精确地保存了所有对目录树进行配置的<code class="program"><a href="programs/configure.html">configure</a></code>命令行。你只需要将<code>config.nice</code>文件复制到新的源代码目录树的根文件夹并进行你希望的修改后，然后运行下面的命令即可完成升级：</p>

    <div class="example"><p><code>
    $ ./config.nice<br />
    $ make<br />
    $ make install<br />
    $ <em>PREFIX</em>/bin/apachectl -k graceful-stop<br />
    $ <em>PREFIX</em>/bin/apachectl -k start<br />
    </code></p></div>

    <div class="warning">你应该总是在将新版本的Apache投入正式运行前，对这个新版本进行足够的、针对你的实际运行环境的测试。比如，你可以使用一个不同的 <code>--prefix</code> 设置将新版本安装在一个不同的目录，并使用<code class="directive"><a href="mod/mpm_common.html#listen">Listen</a></code>指令在一个不同的端口监听。经过一段时间的测试以发现可能存在的问题，然后再做出最后的决定。</div>
</div></div>
<div id="footer">
<p class="apache">本文允许自由的转载、引用、再分发，但必须保留译者署名并注明出处；详见：<a href="translator_announcement.html#announcement">版权声明</a>。</p>
<p class="menu"><a href="mod/index.html">模块索引</a> | <a href="mod/directives.html">指令索引</a> | <a href="faq/index.html">常见问题</a> | <a href="glossary.html">词汇表</a> | <a href="sitemap.html">站点导航</a></p></div>
</body></html>
